/**
 * 
 */
package cupiPhoneMundo;

import java.util.ArrayList;

import uniandes.cupi2.collections.trie.ElementoNoExisteException;
import uniandes.cupi2.collections.trie.PalabraInvalidaException;

/**
 * @author Andres Tellez & Lino Cardenas
 * 
 */
public interface ICupiPhone
{

    /**
     * Metodo que da el numero de palabras que hay en el diccionario
     * @return cantidad de palabras dentro del diccionario
     */
    public int darNumeroPalabrasDiccionario( );

    /**
     * Metodo que retorna el numero de palabras dentro del mensaje
     * @param mensaje: El mensaje donde se contaran las palabras.
     * @return el numero de palabras dentro del mensaje
     */
    public int darNumeroPalabrasMensaje( String mensaje );

    /**
     * Metodo que retorna el numero de caracteres dentro del mensaje
     * @param mensaje: El mensaje donde se contaran los caracteres.
     * @return el numero de caracteres dentro del mensaje
     */
    public int darNumeroCaracteresMensaje( String mensaje );

    /**
     * Metodo que elimina una palabra del diccionario.
     * @param palabra: palabra a eliminar
     * @throws ElementoNoExisteException: Exception que se lanza cuando se trata de eliminar un elemtno que no existe.
     * @throws PalabraInvalidaException: Exception que se lanza cuando se trata de eliminar un elemento invalido.
     */
    public void eliminarPalabra( String palabra ) throws ElementoNoExisteException, PalabraInvalidaException;

    /**
     * Metodo que agrega un contacto al "directorio"
     * @param nombreC: Nombre del contacto
     * @param telefonoC: Telefono del contacto
     * @param emailC: Direccion e-mail del contacto
     * @throws ContactoRepetidoException: Exception que se lanza cuando se trata de agregar un contacto ya existente.
     */
    public void agregarContacto( String nombreC, String numeroCasaC, String numeroPersonalC, String numeroTrabajoC, String numeroCelularC, String emailC ) throws ContactoRepetidoException;

    /**
     * Metodo que elimina un contacto del directorio
     * @param nombre: nombre del contacto a eliminar
     */
    public void eliminarContacto( String nombre );

    /**
     * Metodo que elimina una palabra del diccionario
     * @param palabra: palabra a eliminar
     */
    public void agregarPalabra( String palabra );
    
    public void darContactos(ArrayList contactos);

    public void informarLlamadaEntrante( );

}
